﻿using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.Odbc;
using WLMCoreLibrary;
using System.Xml;
using System.Xml.Serialization;
using System.ComponentModel;
using System.CodeDom.Compiler;
using System.Configuration;
using System.IO;

namespace SAW_Core
{
	public class ConceptoVenta
	{
	

		#region Public properties

		[XmlAttributeAttribute()]
		public decimal cantidad { get; set; }
		[XmlAttributeAttribute()]
		public string unidad { get; set; }
		[XmlAttributeAttribute()]
		public string noIdentificacion { get; set; }
		[XmlAttributeAttribute()]
		public string categoria { get; set; }
		[XmlAttributeAttribute()]
		public string linea { get; set; }
		[XmlAttributeAttribute()]
		public string marca { get; set; }
		[XmlAttributeAttribute()]
		public string modelo { get; set; }
		[XmlAttributeAttribute()]
		public string descripcion { get; set; }
		[XmlAttributeAttribute()]
		public decimal valorUnitario { get; set; }
		[XmlAttributeAttribute()]
		public decimal importe { get; set; }

		#endregion

		#region Constructors

		public ConceptoVenta()
		{
		} 
		#endregion
	}

	#region Serialization headers

	[Serializable]
	[DesignerCategory("code")]
	[XmlRoot(Namespace = "http://wlm.com.mx/SAI/doc", IsNullable = false)]
	[XmlType(AnonymousType = true, Namespace = "http://wlm.com.mx/SAI/doc")]
	[GeneratedCode("xsd", "2.0.50727.3038")] 
	#endregion
	public class Documento
	{


		#region Atrributes
		[XmlAttributeAttribute()]
		public int idStatus { get; set; }
		[XmlAttributeAttribute()]
		public int NoDocumento { get; set; }
		[XmlAttributeAttribute()]
		public int NoPedido { get; set; }
		[XmlAttributeAttribute()]
		public int NoRemision { get; set; }
		[XmlAttributeAttribute()]
		public int NoSalida { get; set; }
		[XmlAttribute()]
		public string NoFactura
		{
			get; set;
		}
		[XmlAttributeAttribute()]
		public string UlrFactura
		{
			get; set;
		}
		[XmlAttributeAttribute()]
		public DateTime FechaCreacion { get; set; }
		[XmlAttributeAttribute()]
		public DateTime FechaVencimiento { get; set; }
		[XmlAttributeAttribute()]
		public int NoCliente { get; set; }
		[XmlAttributeAttribute()]
		public string NombreCliente { get; set; }
		[XmlAttributeAttribute()]
		public string NombreComercial { get; set; }
		[XmlAttributeAttribute()]
		public string LineaTransporte { get; set; }
		[XmlAttributeAttribute()]
		public string RFC { get; set; }
		[XmlAttributeAttribute()]
		public string telefono { get; set; }
		[XmlAttributeAttribute()]
		public string email { get; set; }
		[XmlAttributeAttribute()]
		public string fax { get; set; }
		[XmlAttributeAttribute()]
		public string telefonoContacto { get; set; }
		[XmlAttributeAttribute()]
		public string celularContacto { get; set; }
		[XmlAttributeAttribute()]
		public string nombreContacto { get; set; }
		[XmlAttributeAttribute()]
		public string emailContacto { get; set; }
		[XmlAttributeAttribute()]
		public string CondicionesPago { get; set; }
		[XmlAttributeAttribute()]
		public decimal SubTotal { get; set; }
		[XmlAttributeAttribute()]
		public decimal Descuento { get; set; }
		[XmlAttributeAttribute()]
		public decimal DescuentoPorcentaje { get; set; }
		[XmlAttributeAttribute()]
		public decimal IVA { get; set; }
		[XmlAttributeAttribute()]
		public decimal Total { get; set; }
		[XmlAttributeAttribute()]
		public DateTime FechaPedido { get; set; }
		[XmlAttributeAttribute()]
		public DateTime FechaRemision { get; set; }
		[XmlAttributeAttribute()]
		public DateTime FechaSalida { get; set; }
		[XmlAttributeAttribute()]
		public int DiasCredito { get; set; }

		public Direccion DireccionEmisor { get; set; }
		public Direccion DireccionFacturacion { get; set; }
		public Direccion DireccionEnvio { get; set; }
		[XmlElement("Concepto")]
		public List<ConceptoVenta> Conceptos { get; set; }
		public string Observaciones { get; set; }

		#endregion

		#region Constructors

		public void CargarDatos(Venta cotizacion, dbConnector ConexionDB)
		{
			NoCliente = cotizacion.idCliente;
			NombreCliente = cotizacion.NombreCliente;
			NombreComercial = cotizacion.NombreComercialCliente;
			NoDocumento = cotizacion.id;
			NoPedido = cotizacion.NoPedido;
			NoRemision = cotizacion.NoRemision;
			NoSalida = cotizacion.NoSalida;
			NoFactura = cotizacion.NoFactura;
			idStatus = cotizacion.Status;
			RFC = cotizacion.RFCCliente;
			FechaCreacion = cotizacion.fechaCreacion;
			FechaVencimiento = cotizacion.FechaVencimiento;
			FechaPedido = cotizacion.FechaPedido;
			FechaRemision = cotizacion.FechaRemision;
			FechaSalida = cotizacion.FechaSalida;
			DiasCredito = cotizacion.DiasCredito;
			CondicionesPago = cotizacion.CondicionesPago;
			Observaciones = cotizacion.Observaciones;
			Cliente cliente = new Cliente(cotizacion.idCliente, ref ConexionDB);
			telefono = cliente.Telefono;
			email = cliente.Email;
			fax = cliente.FAX;
			LineaTransporte = cliente.LineaTransporte;
			ContactoCollection contactos = new ContactoCollection(cliente, ref ConexionDB);
			if (contactos.Elementos.Count > 0)
			{
				int idUltimoRegistro=contactos.Elementos.Count - 1;
				nombreContacto = contactos.Elementos[idUltimoRegistro].Nombre + " " + contactos.Elementos[idUltimoRegistro].Apellidos;
				celularContacto = contactos.Elementos[idUltimoRegistro].Celular;
				telefonoContacto = contactos.Elementos[idUltimoRegistro].Telefono;
				emailContacto = contactos.Elementos[idUltimoRegistro].Email;
			}
			SubTotal = cotizacion.SubTotal;
			DescuentoPorcentaje = cotizacion.Descuento;
			Descuento = (SubTotal * (DescuentoPorcentaje / 100));
			IVA = cotizacion.IVA;
			Total = cotizacion.Total;

			DireccionFacturacion = new Direccion();
			DireccionFacturacion.Calle = cotizacion.F_Calle;
			DireccionFacturacion.NumeroExterior = cotizacion.F_NumeroExterior;
			DireccionFacturacion.NumeroInterior = cotizacion.F_NumeroInterior;
			DireccionFacturacion.Colonia = cotizacion.F_Colonia;
			DireccionFacturacion.Ciudad = cotizacion.F_Ciudad;
			DireccionFacturacion.Municipio = cotizacion.F_Municipio;
			DireccionFacturacion.Estado = cotizacion.F_Estado;
			DireccionFacturacion.CP = cotizacion.F_CP;

			DireccionEnvio = new Direccion();
			DireccionEnvio.Calle = cotizacion.Calle;
			DireccionEnvio.NumeroExterior = cotizacion.NumeroExterior;
			DireccionEnvio.NumeroInterior = cotizacion.NumeroInterior;
			DireccionEnvio.Colonia = cotizacion.Colonia;
			DireccionEnvio.Ciudad = cotizacion.Ciudad;
			DireccionEnvio.Municipio = cotizacion.Municipio;
			DireccionEnvio.Estado = cotizacion.Estado;
			DireccionEnvio.CP = cotizacion.CP;
			// Datos de Los Conceptos
			foreach (VentaItem item in cotizacion.Conceptos)
			{
				ConceptoVenta concepto = new ConceptoVenta();
				concepto.cantidad = item.Cantidad;
				concepto.unidad = "Pza.";
				concepto.noIdentificacion = item.Clave;
				concepto.descripcion = item.Descripcion;
				concepto.valorUnitario = item.Precio;
				concepto.importe = item.Precio * item.Cantidad;
				concepto.modelo = item.Modelo;
				concepto.categoria = item.Categoria;
				concepto.linea = item.Linea;
				concepto.marca = item.Marca;
				Conceptos.Add(concepto);
			}

		}

		public void CargarDatos(Compra compra, ref dbConnector ConexionDB)
		{
			NoCliente = compra.idProveedor;
			NombreCliente = compra.NombreCliente;
			NombreComercial = compra.NombreComercialCliente;
			NoDocumento = compra.id;
			NoPedido = compra.NoPedido;
			NoRemision = compra.NoRemision;
			NoSalida = compra.NoSalida;
			RFC = compra.RFCProveedor;
			FechaCreacion = compra.fechaCreacion;
			FechaVencimiento = compra.FechaVencimiento;
			CondicionesPago = compra.CondicionesPago;
			Observaciones = compra.Observaciones;
			Proveedor proveedor = new Proveedor(compra.idProveedor, ref ConexionDB);
			telefono = proveedor.Telefono;
			email = proveedor.Email;
			fax = proveedor.FAX;
			LineaTransporte = proveedor.Banco;
			ContactoCollection contactos = new ContactoCollection(proveedor, ref ConexionDB);
			if (contactos.Elementos.Count > 0)
			{
				int idUltimoRegistro = contactos.Elementos.Count - 1;
				nombreContacto = contactos.Elementos[idUltimoRegistro].Nombre + " " + contactos.Elementos[idUltimoRegistro].Apellidos;
				celularContacto = contactos.Elementos[idUltimoRegistro].Celular;
				telefonoContacto = contactos.Elementos[idUltimoRegistro].Telefono;
				emailContacto = contactos.Elementos[idUltimoRegistro].Email;
			}
			SubTotal = compra.SubTotal;
			Descuento = compra.Descuento;
			IVA = compra.IVA;
			Total = compra.Total;

			DireccionFacturacion = new Direccion();
			DireccionFacturacion.Calle = compra.F_Calle;
			DireccionFacturacion.NumeroExterior = compra.F_NumeroExterior;
			DireccionFacturacion.NumeroInterior = compra.F_NumeroInterior;
			DireccionFacturacion.Colonia = compra.F_Colonia;
			DireccionFacturacion.Ciudad = compra.F_Ciudad;
			DireccionFacturacion.Municipio = compra.F_Municipio;
			DireccionFacturacion.Estado = compra.F_Estado;
			DireccionFacturacion.CP = compra.F_CP;

			DireccionEnvio = new Direccion();
			DireccionEnvio.Calle = compra.Calle;
			DireccionEnvio.NumeroExterior = compra.NumeroExterior;
			DireccionEnvio.NumeroInterior = compra.NumeroInterior;
			DireccionEnvio.Colonia = compra.Colonia;
			DireccionEnvio.Ciudad = compra.Ciudad;
			DireccionEnvio.Municipio = compra.Municipio;
			DireccionEnvio.Estado = compra.Estado;
			DireccionEnvio.CP = compra.CP;
			// Datos de Los Conceptos
			foreach (CompraItem item in compra.Conceptos)
			{
				ConceptoVenta concepto = new ConceptoVenta();
				concepto.cantidad = item.Cantidad;
				concepto.unidad = "Pza.";
				concepto.noIdentificacion = item.Clave;
				concepto.descripcion = item.Descripcion;
				concepto.valorUnitario = item.Precio;
				concepto.importe = item.Precio * item.Cantidad;
				concepto.modelo = item.Modelo;
				concepto.categoria = item.Categoria;
				concepto.linea = item.Linea;
				concepto.marca = item.Marca;
				Conceptos.Add(concepto);
			}

		}


		#endregion
	}

	[Serializable]
	public class Venta : BaseClass
	{
		
		private List<VentaItem> _conceptos;


		#region public properties
		[XmlAttributeAttribute()]
		public int idCliente { get; set; }
		[XmlAttributeAttribute()]
		public String NombreCliente { get; set; }
		[XmlAttributeAttribute()]
		public String NombreComercialCliente { get; set; }
		[XmlAttributeAttribute()]
		public String RFCCliente { get; set; }
		[XmlAttributeAttribute()]
		public String F_Calle { get; set; }
		[XmlAttributeAttribute()]
		public String F_NumeroExterior { get; set; }
		[XmlAttributeAttribute()]
		public String F_NumeroInterior { get; set; }
		[XmlAttributeAttribute()]
		public String F_Colonia { get; set; }
		[XmlAttributeAttribute()]
		public String F_Municipio { get; set; }
		[XmlAttributeAttribute()]
		public String F_Ciudad { get; set; }
		[XmlAttributeAttribute()]
		public String F_Estado { get; set; }
		[XmlAttributeAttribute()]
		public String F_CP { get; set; }
		[XmlAttributeAttribute()]
		public String Calle { get; set; }
		[XmlAttributeAttribute()]
		public String NumeroExterior { get; set; }
		[XmlAttributeAttribute()]
		public String NumeroInterior { get; set; }
		[XmlAttributeAttribute()]
		public String Colonia { get; set; }
		[XmlAttributeAttribute()]
		public String Ciudad { get; set; }
		[XmlAttributeAttribute()]
		public String Municipio { get; set; }
		public String Estado { get; set; }
		public String CP { get; set; }
		public DateTime FechaVencimiento { get; set; }
		public String TiempoEntrega { get; set; }
		public String CondicionesPago { get; set; }
		public String Observaciones { get; set; }
		public Decimal SubTotal { get; set; }
		public Decimal Descuento { get; set; }
		public Decimal DescuentoPorcentaje { get; set; }
		public Decimal IVA { get; set; }
		public Decimal Total { get; set; }
		public int idListaPrecios { get; set; }
		public int idCondicionesPago { get; set; }
		public Decimal SaldoPendiente { get; set; }
		public Decimal SaldoPagado { get; set; }
		public int Status { get; set; }
		public int NoPedido { get; set; }
		public int NoRemision { get; set; }
		public int NoSalida { get; set; }
		public string NoFactura { get; set; }
		public DateTime FechaPedido { get; set; }
		public DateTime FechaRemision { get; set; }
		public DateTime FechaSalida { get; set; }
		public int DiasCredito { get; set; }
		public int IdAlmacen { get; set; }
		public int idCompra { get; set; }
		public Boolean Activo { get; set; }
		public List<VentaItem> Conceptos { get; set; }
		public int idFactura
		{
			get; set;
		}
		public bool Facturado
		{
			get; set;

		}
		public DateTime FechaFacturacion
		{
			get; set;

		}
		#endregion

		#region constructors
		public Venta()
		{
		}
		public Venta(ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
			id = classBinder.NewRecord("COTIZACIONES");
			string queryString = "";
			queryString = "SELECT * FROM COTIZACIONES WHERE id='" + this.id + "'";
			GetRecord(queryString);
		}

		public Venta(int registryId, ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			string queryString = "";
			queryString = "SELECT * FROM COTIZACIONES WHERE id='" + registryId + "'";

			this.GetRecord(queryString);
		}


		/// <summary>
		/// Carga la cotizacion en memoria incluyendo los items relacionados a la misma
		/// </summary>
		/// <param name="registryId">El numero de Cotizacion</param>
		/// <param name="cargarTodo"></param>
		/// <param name="ConexionDB"></param>
		public Venta(int registryId, bool cargarTodo, ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			string queryString = "";
			queryString = "SELECT * FROM COTIZACIONES WHERE id='" + registryId + "'";

			this.GetRecord(queryString);
			if (cargarTodo)
			{
				 Conceptos = new VentaItemCollection(this, ref ConexionDB).Elementos;
			}
		}
		public Venta(DataRow dataRow, ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			this.GetRecord(dataRow);
		}
		#endregion

		#region public methods

		public int ConvertirAPedido()
		{
			if (Status == 1)
			{
				bool todoEnStock = true;
				Almacen almacen = new Almacen(IdAlmacen, ref ConexionDBInterna);
				//Verificando si todo el pedido se encuentra en Stock
				foreach (VentaItem item in Conceptos)
				{
					Producto producto = new Producto(item.idProducto, ref ConexionDBInterna);
					//if ((producto.Stock - producto.Apartados) < item.Cantidad)
					//    todoEnStock = false;
					ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDBInterna);
					if ((stock.Stock - stock.Apartados) < item.Cantidad)
						todoEnStock = false;
				}
				int NoPedidoNuevo = 1;
				string consulta = "SELECT NoPedido FROM COTIZACIONES WHERE idAlmacen='" + IdAlmacen.ToString() + "'  ORDER BY NoPedido DESC LIMIT 1";
				OdbcDataReader lector= ConexionDBInterna.ExecuteReader(consulta);
				if (lector.HasRows)
					NoPedidoNuevo = Convert.ToInt32(lector["NoPedido"]) + 1;

				Cliente cliente = new Cliente(idCliente, ref ConexionDBInterna);
				cliente.SaldoActual += Total;
				cliente.Save();

				//if (todoEnStock)
				{
					Status = 2;
					SaldoPendiente = Total;
					NoPedido = NoPedidoNuevo;
					FechaPedido = DateTime.Now;
					Save();

					foreach (VentaItem item in Conceptos)
					{
						Producto producto = new Producto(item.idProducto, ref ConexionDBInterna);
						ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDBInterna);
						stock.Apartados += item.Cantidad;
						stock.Save();
						item.Status = 2;
						item.Save();
					}
					return NoPedidoNuevo;
				}
			}
			return 0;
		}

		public ResultadoProcesoVenta GenerarRemision()
		{
			ResultadoProcesoVenta resultado = new ResultadoProcesoVenta();
			if (Status == 2)
			{
				bool todoEnStock = true;
				Almacen almacen = new Almacen(IdAlmacen, ref ConexionDBInterna);
				//Verificando si todo el pedido se encuentra en Stock
				foreach (VentaItem item in Conceptos)
				{
					Producto producto = new Producto(item.idProducto, ref ConexionDBInterna);
					ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDBInterna);
					if ((stock.Stock) < item.Cantidad)
					{
						todoEnStock = false;
						resultado.Error = true;
						resultado.Items.Add(item.Descripcion);
						resultado.Mensaje = "Productos Faltantes";
					}
				}
				int NoRemisionNuevo = 1;
				string consulta = "SELECT NoRemision FROM COTIZACIONES WHERE idAlmacen='" + IdAlmacen.ToString() + "' ORDER BY NoRemision DESC LIMIT 1";
				OdbcDataReader lector = ConexionDBInterna.ExecuteReader(consulta);
				if (lector.HasRows)
					NoRemisionNuevo = Convert.ToInt32(lector["NoRemision"]) + 1;



				if (!resultado.Error)
				{
					Status = 3;

					resultado.NoRemision = NoRemisionNuevo;
					NoRemision = NoRemisionNuevo;
					FechaRemision = DateTime.Now;
					Save();

					//foreach (CotizacionItem item in Conceptos)
					//{
					//    Producto producto = new Producto(item.idProducto,ref ConexionDB);
					//    producto.Apartados += item.Cantidad;
					//    producto.Save();
					//    item.Status = 2;
					//    item.Save();
					//}
					return resultado;
				}

			}
			resultado.Error = true;
			return resultado;
		}

		public ResultadoProcesoVenta GenerarSalida()
		{
			ResultadoProcesoVenta resultado = new ResultadoProcesoVenta();
			if (Status == 3)
			{
				bool todoEnStock = true;
				Almacen almacen = new Almacen(IdAlmacen, ref ConexionDBInterna);
				//Verificando si todo el pedido se encuentra en Stock
				foreach (VentaItem item in Conceptos)
				{
					Producto producto = new Producto(item.idProducto, ref ConexionDBInterna);
					ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDBInterna);
					if ((stock.Stock) < item.Cantidad)
					{
						todoEnStock = false;

						resultado.Error = true;
						resultado.Items.Add(item.Descripcion);
						resultado.Mensaje = "Productos Faltantes en Almacen " + almacen.Nombre;

					}
				}
				int NoSalidaNuevo = 1;
				string consulta = "SELECT NoSalida FROM COTIZACIONES WHERE idAlmacen='" + IdAlmacen.ToString() + "'   ORDER BY NoSalida DESC LIMIT 1";
				OdbcDataReader lector = ConexionDBInterna.ExecuteReader(consulta);
				if (lector.HasRows)
					NoSalidaNuevo = Convert.ToInt32(lector["NoSalida"]) + 1;



				if (!resultado.Error)
				{
					Status = 4;
					//SaldoPendiente = Total;
					resultado.NoSalida = NoSalidaNuevo;
					NoSalida = NoSalidaNuevo;
					FechaSalida = DateTime.Now;
					Save();

					foreach (VentaItem item in Conceptos)
					{
						Producto producto = new Producto(item.idProducto, ref ConexionDBInterna);
						ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDBInterna);
						stock.Apartados -= item.Cantidad;

						MovimientoStock movimiento = new MovimientoStock(ref ConexionDBInterna);
						movimiento.stockInicial = stock.Stock;
						stock.Stock -= item.Cantidad;
						movimiento.stockFinal = stock.Stock;
						movimiento.cantidadSalida = item.Cantidad;
						movimiento.salida = true;
						movimiento.idProducto = producto.id;
						movimiento.idAlmacen = almacen.id;
						movimiento.idVenta = id;
						movimiento.fechaAplicacion = DateTime.Now;
						movimiento.idCliente = idCliente;

						movimiento.Save();

						stock.Save();
						item.Status = 3;
						item.Save();
					}
					resultado.Mensaje = "Proceso Completado";
					return resultado;
				}
			}
			resultado.Error = true;
			return resultado;
		}

		public ResultadoProcesoVenta CancelarCotizacion(int idCuentaBancariaReembolso, int idTipoReembolso)
		{
			ResultadoProcesoVenta resultado = new ResultadoProcesoVenta();
			Almacen almacen = new Almacen(IdAlmacen, ref ConexionDBInterna);
			foreach (VentaItem item in Conceptos)
			{
				Producto producto = new Producto(item.idProducto, ref ConexionDBInterna);
				ProductoStock stock = new ProductoStock(producto, almacen, ref ConexionDBInterna);
				if (Status == 4)

					stock.Stock += item.Cantidad;
				else
					stock.Apartados -= item.Cantidad;
				stock.Save();
				resultado.Error = true;
				resultado.Items.Add(item.Descripcion + " - " + item.Cantidad.ToString());
				resultado.Mensaje = "Productos Restablecidos en Stock";
			}
			if (Status > 1)
			{
				//Borrando Movimientos Bancarios
				VentaPagoCollection listaPagos = new VentaPagoCollection(this, ref  ConexionDBInterna);
				decimal totalPagos = 0;
				foreach (VentaPago pago in listaPagos.Elementos)
				{
					MovimientoBancario deposito = new MovimientoBancario(pago.idMovimientoBancario, ref ConexionDBInterna);
					totalPagos += deposito.monto;
					//deposito.Delete();
					//pago.Delete();
				}
				SalidaDinero rembolso = new SalidaDinero(ref ConexionDBInterna);
				Cliente cliente = new Cliente(idCliente, ref ConexionDBInterna);
				rembolso.Monto = totalPagos;
				rembolso.Concepto = "Reembolso de Cotizacion No. " + id;
				rembolso.ANombreDe = cliente.RazonSocial;
				rembolso.idCuenta = idCuentaBancariaReembolso;
				rembolso.IdCliente = cliente.id;
				rembolso.IdCotizacion = id;
				if (idTipoReembolso == 1)
				{
					CuentaBancaria cuenta = new CuentaBancaria(idCuentaBancariaReembolso, ref ConexionDBInterna);
					cuenta.numeroUltimoCheque++;
					rembolso.NoCheque = cuenta.numeroUltimoCheque;
					cuenta.Save();
				}
				rembolso.tipoRetiro = idTipoReembolso;
				rembolso.Save();
				rembolso.RealizarPago();
				cliente.SaldoActual = cliente.SaldoActual - rembolso.Monto;
				cliente.Save();
			}
			Status = 0;
			SaldoPagado = 0;
			SaldoPendiente = 0;
			Save();
			return resultado;

		}

		public ResultadoProcesoVenta Facturar(decimal porcentajeCotizacion)
		{
			ResultadoProcesoVenta resultado = new ResultadoProcesoVenta();
			FacturaSerie serie= new FacturaSerie(1, ref ConexionDBInterna);
			Factura factura = new Factura(ref ConexionDBInterna);
			factura.CargarDatosSerie(serie);
			factura.CargarDatosCliente(new Cliente(idCliente, ref ConexionDBInterna));
			factura.CargarDatosCotizacion(this, porcentajeCotizacion);



			factura.ArchivoCFDXML = factura.GenerarFacturaElectronica(serie.DirectorioGeneracion, serie.archivoFolios, serie.ArchivoCertificado, serie.ArchivoKey, serie.KeyPassword, serie.ArchivoCertificadores, serie.ArchivoRevocados);
			factura.idCotizacion = this.id;
			factura.Save();
			NoFactura += factura.Serie + factura.NoFolio + " ";
			resultado.IdFacuraGenerada = factura.id;
			Facturado = true;            
			Save();

			string toEncode = ConfigurationManager.AppSettings["siteURL"] + "printInvoice.aspx?idFactura=" + factura.id;
			byte[] toEncodeAsBytes
			= System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
			string returnValue
			= System.Convert.ToBase64String(toEncodeAsBytes);

			resultado.Mensaje = "http://pdfy.me/g/" + returnValue + "/36a26739836f10eae93dcd19a6dc9d815ab26c8e/";
			return resultado;
		}

		public void Delete()
		{
			Activo = false;
			Save();
			//string queryString = "";
			//queryString = "DELETE FROM COTIZACIONES WHERE id='" + this.id + "'";
			//ConexionDBInterna.ExecuteCommand(queryString);

		}

		public void GenerarArchivoXML()
		{
			StringBuilder salida = new StringBuilder();
			Documento doc = new Documento();
			doc.CargarDatos(this, new dbConnector());
			XmlSerializer serializer = new XmlSerializer(typeof(Documento));

			string rutaArchivos = "";
			string nombreArchivo = doc.NoDocumento.ToString("00000");

			rutaArchivos += "CotizacionesXML/" + doc.NoDocumento.ToString("00000") + "/";
			DirectoryInfo directorio = new DirectoryInfo(ConfigurationManager.AppSettings["sitePath"] + rutaArchivos);
			if (!directorio.Exists)
				directorio.Create();



			string archivo = ConfigurationManager.AppSettings["sitePath"] + rutaArchivos + nombreArchivo + ".xml";
			TextWriter tw = new StreamWriter(archivo);
			serializer.Serialize(tw, doc);
			tw.Close();

			//PDFCreator pdf = new PDFCreator();
			//pdf.CrearPDFdeHTML(WLMFunctions.TransformXML(ConfigurationManager.AppSettings["siteURL"] + rutaArchivos + nombreArchivo + ".xml", ConfigurationManager.AppSettings["siteURL"] + "cotizacionImpresion.xsl"), nombreArchivo + ".pdf", rutaArchivos, false, false);
		}
		#endregion

		#region Private Methods
		private void GetRecord(string queryString)
		{
			OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
			if (reader.HasRows)
			{
				if (!reader.IsDBNull(reader.GetOrdinal("id")))
					id = (System.Int32)reader["id"];
				if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
				 fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
				 fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
					idUsuario = (System.Int32)reader["idUsuario"];
				if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
					idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
				if (!reader.IsDBNull(reader.GetOrdinal("idCliente")))
					idCliente = (System.Int32)reader["idCliente"];
				if (!reader.IsDBNull(reader.GetOrdinal("NombreCliente")))
				 NombreCliente = (System.String)reader["NombreCliente"];
				if (!reader.IsDBNull(reader.GetOrdinal("NombreComercialCliente")))
				 NombreComercialCliente = (System.String)reader["NombreComercialCliente"];
				if (!reader.IsDBNull(reader.GetOrdinal("RFCCliente")))
				 RFCCliente = (System.String)reader["RFCCliente"];
				if (!reader.IsDBNull(reader.GetOrdinal("F_Calle")))
				 F_Calle = (System.String)reader["F_Calle"];
				if (!reader.IsDBNull(reader.GetOrdinal("F_NumeroExterior")))
				 F_NumeroExterior = (System.String)reader["F_NumeroExterior"];
				if (!reader.IsDBNull(reader.GetOrdinal("F_NumeroInterior")))
				 F_NumeroInterior = (System.String)reader["F_NumeroInterior"];
				if (!reader.IsDBNull(reader.GetOrdinal("F_Colonia")))
				 F_Colonia = (System.String)reader["F_Colonia"];
				if (!reader.IsDBNull(reader.GetOrdinal("F_Municipio")))
				 F_Municipio = (System.String)reader["F_Municipio"];
				if (!reader.IsDBNull(reader.GetOrdinal("F_Ciudad")))
				 F_Ciudad = (System.String)reader["F_Ciudad"];
				if (!reader.IsDBNull(reader.GetOrdinal("F_Estado")))
				 F_Estado = (System.String)reader["F_Estado"];
				if (!reader.IsDBNull(reader.GetOrdinal("F_CP")))
				 F_CP = (System.String)reader["F_CP"];
				if (!reader.IsDBNull(reader.GetOrdinal("Calle")))
				 Calle = (System.String)reader["Calle"];
				if (!reader.IsDBNull(reader.GetOrdinal("NumeroExterior")))
				 NumeroExterior = (System.String)reader["NumeroExterior"];
				if (!reader.IsDBNull(reader.GetOrdinal("NumeroInterior")))
				 NumeroInterior = (System.String)reader["NumeroInterior"];
				if (!reader.IsDBNull(reader.GetOrdinal("Colonia")))
				 Colonia = (System.String)reader["Colonia"];
				if (!reader.IsDBNull(reader.GetOrdinal("Ciudad")))
				 Ciudad = (System.String)reader["Ciudad"];
				if (!reader.IsDBNull(reader.GetOrdinal("Municipio")))
				 Municipio = (System.String)reader["Municipio"];
				if (!reader.IsDBNull(reader.GetOrdinal("Estado")))
				 Estado = (System.String)reader["Estado"];
				if (!reader.IsDBNull(reader.GetOrdinal("CP")))
				 CP = (System.String)reader["CP"];
				if (!reader.IsDBNull(reader.GetOrdinal("FechaVencimiento")))
				 FechaVencimiento = Convert.ToDateTime(reader["FechaVencimiento"]);
				if (!reader.IsDBNull(reader.GetOrdinal("TiempoEntrega")))
				 TiempoEntrega = (System.String)reader["TiempoEntrega"];
				if (!reader.IsDBNull(reader.GetOrdinal("CondicionesPago")))
				 CondicionesPago = (System.String)reader["CondicionesPago"];
				if (!reader.IsDBNull(reader.GetOrdinal("Observaciones")))
				 Observaciones = (System.String)reader["Observaciones"];
				if (!reader.IsDBNull(reader.GetOrdinal("SubTotal")))
				 SubTotal = (System.Decimal)reader["SubTotal"];
				if (!reader.IsDBNull(reader.GetOrdinal("Descuento")))
				 Descuento = (System.Decimal)reader["Descuento"];
				if (!reader.IsDBNull(reader.GetOrdinal("DescuentoPorcentaje")))
				 DescuentoPorcentaje = (System.Decimal)reader["DescuentoPorcentaje"];
				if (!reader.IsDBNull(reader.GetOrdinal("IVA")))
				 IVA = (System.Decimal)reader["IVA"];
				if (!reader.IsDBNull(reader.GetOrdinal("Total")))
				 Total = (System.Decimal)reader["Total"];
				if (!reader.IsDBNull(reader.GetOrdinal("idListaPrecios")))
					idListaPrecios = (System.Int32)reader["idListaPrecios"];
				if (!reader.IsDBNull(reader.GetOrdinal("idCondicionesPago")))
					idCondicionesPago = (System.Int32)reader["idCondicionesPago"];
				if (!reader.IsDBNull(reader.GetOrdinal("SaldoPendiente")))
				 SaldoPendiente = (System.Decimal)reader["SaldoPendiente"];
				if (!reader.IsDBNull(reader.GetOrdinal("SaldoPagado")))
				 SaldoPagado = (System.Decimal)reader["SaldoPagado"];
				if (!reader.IsDBNull(reader.GetOrdinal("Status")))
				 Status = (System.Int32)reader["Status"];
				if (!reader.IsDBNull(reader.GetOrdinal("NoPedido")))
				 NoPedido = (System.Int32)reader["NoPedido"];
				if (!reader.IsDBNull(reader.GetOrdinal("NoRemision")))
				 NoRemision = (System.Int32)reader["NoRemision"];
				if (!reader.IsDBNull(reader.GetOrdinal("NoSalida")))
				 NoSalida = (System.Int32)reader["NoSalida"];
				if (!reader.IsDBNull(reader.GetOrdinal("FechaPedido")))
				 FechaPedido = Convert.ToDateTime(reader["FechaPedido"]);
				if (!reader.IsDBNull(reader.GetOrdinal("FechaRemision")))
				 FechaRemision = Convert.ToDateTime(reader["FechaRemision"]);
				if (!reader.IsDBNull(reader.GetOrdinal("FechaSalida")))
				 FechaSalida = Convert.ToDateTime(reader["FechaSalida"]);
				if (!reader.IsDBNull(reader.GetOrdinal("DiasCredito")))
				 DiasCredito = (System.Int32)reader["DiasCredito"];
				if (!reader.IsDBNull(reader.GetOrdinal("idAlmacen")))
					IdAlmacen = (System.Int32)reader["idAlmacen"];
				if (!reader.IsDBNull(reader.GetOrdinal("idCompra")))
					idCompra = (System.Int32)reader["idCompra"];
				if (!reader.IsDBNull(reader.GetOrdinal("activo")))
				 Activo = Convert.ToBoolean(reader["activo"]);
				if (!reader.IsDBNull(reader.GetOrdinal("noFactura")))
				 NoFactura = (System.String)reader["noFactura"];
				if (!reader.IsDBNull(reader.GetOrdinal("facturado")))
				 Facturado = Convert.ToBoolean(reader["facturado"]);
				if (!reader.IsDBNull(reader.GetOrdinal("idFactura")))
					idFactura = (System.Int32)reader["idFactura"];
				if (!reader.IsDBNull(reader.GetOrdinal("fechaFacturacion")))
				 FechaFacturacion = Convert.ToDateTime(reader["fechaFacturacion"]);
			}
		}

		private void GetRecord(DataRow dataRow)
		{
			if (dataRow != null)
			{
				if (dataRow["id"] != null)
					id = (System.Int32)dataRow["id"];
				if (dataRow["fechaCreacion"] != null)
				 fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
				if (dataRow["fechaModificacion"] != null)
				 fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
				if (dataRow["idUsuario"] != null)
					idUsuario = (System.Int32)dataRow["idUsuario"];
				if (dataRow["idUsuarioModificacion"] != null)
					idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
				if (dataRow["idCliente"] != null)
					idCliente = (System.Int32)dataRow["idCliente"];
				if (dataRow["NombreCliente"] != null)
				 NombreCliente = (System.String)dataRow["NombreCliente"];
				if (dataRow["NombreComercialCliente"] != null)
				 NombreComercialCliente = (System.String)dataRow["NombreComercialCliente"];
				if (dataRow["RFCCliente"] != null)
				 RFCCliente = (System.String)dataRow["RFCCliente"];
				if (dataRow["F_Calle"] != null)
				 F_Calle = (System.String)dataRow["F_Calle"];
				if (dataRow["F_NumeroExterior"] != null)
				 F_NumeroExterior = (System.String)dataRow["F_NumeroExterior"];
				if (dataRow["F_NumeroInterior"] != null)
				 F_NumeroInterior = (System.String)dataRow["F_NumeroInterior"];
				if (dataRow["F_Colonia"] != null)
				 F_Colonia = (System.String)dataRow["F_Colonia"];
				if (dataRow["F_Municipio"] != null)
				 F_Municipio = (System.String)dataRow["F_Municipio"];
				if (dataRow["F_Ciudad"] != null)
				 F_Ciudad = (System.String)dataRow["F_Ciudad"];
				if (dataRow["F_Estado"] != null)
				 F_Estado = (System.String)dataRow["F_Estado"];
				if (dataRow["F_CP"] != null)
				 F_CP = (System.String)dataRow["F_CP"];
				if (dataRow["Calle"] != null)
				 Calle = (System.String)dataRow["Calle"];
				if (dataRow["NumeroExterior"] != null)
				 NumeroExterior = (System.String)dataRow["NumeroExterior"];
				if (dataRow["NumeroInterior"] != null)
				 NumeroInterior = (System.String)dataRow["NumeroInterior"];
				if (dataRow["Colonia"] != null)
				 Colonia = (System.String)dataRow["Colonia"];
				if (dataRow["Ciudad"] != null)
				 Ciudad = (System.String)dataRow["Ciudad"];
				if (dataRow["Municipio"] != null)
				 Municipio = (System.String)dataRow["Municipio"];
				if (dataRow["Estado"] != null)
				 Estado = (System.String)dataRow["Estado"];
				if (dataRow["CP"] != null)
				 CP = (System.String)dataRow["CP"];
				if (dataRow["FechaVencimiento"] != null)
				 FechaVencimiento = (System.DateTime)dataRow["FechaVencimiento"];
				if (dataRow["TiempoEntrega"] != null)
				 TiempoEntrega = (System.String)dataRow["TiempoEntrega"];
				if (dataRow["CondicionesPago"] != null)
				 CondicionesPago = (System.String)dataRow["CondicionesPago"];
				if (dataRow["Observaciones"] != null)
				 Observaciones = (System.String)dataRow["Observaciones"];
				if (dataRow["SubTotal"] != null)
				 SubTotal = (System.Decimal)dataRow["SubTotal"];
				if (dataRow["Descuento"] != null)
				 Descuento = (System.Decimal)dataRow["Descuento"];
				if (dataRow["DescuentoPorcentaje"] != null)
				 DescuentoPorcentaje = (System.Decimal)dataRow["DescuentoPorcentaje"];
				if (dataRow["IVA"] != null)
				 IVA = (System.Decimal)dataRow["IVA"];
				if (dataRow["Total"] != null)
				 Total = (System.Decimal)dataRow["Total"];
				if (dataRow["idListaPrecios"] != null)
					idListaPrecios = (System.Int32)dataRow["idListaPrecios"];
				if (dataRow["idCondicionesPago"] != null)
					idCondicionesPago = (System.Int32)dataRow["idCondicionesPago"];
				if (dataRow["SaldoPendiente"] != null)
				 SaldoPendiente = (System.Decimal)dataRow["SaldoPendiente"];
				if (dataRow["SaldoPagado"] != null)
				 SaldoPagado = (System.Decimal)dataRow["SaldoPagado"];
				if (dataRow["Status"] != null)
				 Status = (System.Int32)dataRow["Status"];
				if (dataRow["NoPedido"] != null)
				 NoPedido = (System.Int32)dataRow["NoPedido"];
				if (dataRow["NoRemision"] != null)
				 NoRemision = (System.Int32)dataRow["NoRemision"];
				if (dataRow["NoSalida"] != null)
				 NoSalida = (System.Int32)dataRow["NoSalida"];
				if (dataRow["FechaPedido"] != null)
				 FechaPedido = (System.DateTime)dataRow["FechaPedido"];
				if (dataRow["FechaRemision"] != null)
				 FechaRemision = (System.DateTime)dataRow["FechaRemision"];
				if (dataRow["FechaSalida"] != null)
				 FechaSalida = (System.DateTime)dataRow["FechaSalida"];
				if (dataRow["DiasCredito"] != null)
				 DiasCredito = (System.Int32)dataRow["DiasCredito"];
				if (dataRow["idAlmacen"] != null)
					IdAlmacen = (System.Int32)dataRow["idAlmacen"];
				if (dataRow["idCompra"] != null)
					idCompra = (System.Int32)dataRow["idCompra"];
				if (dataRow["activo"] != null)
				 Activo = (System.Boolean)dataRow["activo"];
				if (dataRow["noFactura"] != null)
				 NoFactura = (System.String)dataRow["noFactura"];
				if (dataRow["facturado"] != null)
				 Facturado = Convert.ToBoolean(dataRow["facturado"]);
				if (dataRow["idFactura"] != null)
					idFactura = (System.Int32)dataRow["idFactura"];
				if (dataRow["fechaFacturacion"] != null)
				 FechaFacturacion = Convert.ToDateTime(dataRow["fechaFacturacion"]);
			}
		}

		protected override void UpdateBind()
		{
			StringBuilder strCommand = new StringBuilder();
			strCommand.Append("UPDATE COTIZACIONES set ");
			strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
			strCommand.Append(",idCliente='" + this.idCliente.ToString() + "'");
			strCommand.Append(",NombreCliente=\"" + WLMFunctions.comillas(NombreCliente) + "\"");
			strCommand.Append(",NombreComercialCliente=\"" + WLMFunctions.comillas(NombreComercialCliente) + "\"");
			strCommand.Append(",RFCCliente=\"" + WLMFunctions.comillas(RFCCliente) + "\"");
			strCommand.Append(",F_Calle=\"" + WLMFunctions.comillas(F_Calle) + "\"");
			strCommand.Append(",F_NumeroExterior=\"" + WLMFunctions.comillas(F_NumeroExterior) + "\"");
			strCommand.Append(",F_NumeroInterior=\"" + WLMFunctions.comillas(F_NumeroInterior) + "\"");
			strCommand.Append(",F_Colonia=\"" + WLMFunctions.comillas(F_Colonia) + "\"");
			strCommand.Append(",F_Municipio=\"" + WLMFunctions.comillas(F_Municipio) + "\"");
			strCommand.Append(",F_Ciudad=\"" + WLMFunctions.comillas(F_Ciudad) + "\"");
			strCommand.Append(",F_Estado=\"" + WLMFunctions.comillas(F_Estado) + "\"");
			strCommand.Append(",F_CP=\"" + WLMFunctions.comillas(F_CP) + "\"");
			strCommand.Append(",Calle=\"" + WLMFunctions.comillas(Calle) + "\"");
			strCommand.Append(",NumeroExterior=\"" + WLMFunctions.comillas(NumeroExterior) + "\"");
			strCommand.Append(",NumeroInterior=\"" + WLMFunctions.comillas(NumeroInterior) + "\"");
			strCommand.Append(",Colonia=\"" + WLMFunctions.comillas(Colonia) + "\"");
			strCommand.Append(",Ciudad=\"" + WLMFunctions.comillas(Ciudad) + "\"");
			strCommand.Append(",Municipio=\"" + WLMFunctions.comillas(Municipio) + "\"");
			strCommand.Append(",Estado=\"" + WLMFunctions.comillas(Estado) + "\"");
			strCommand.Append(",CP=\"" + WLMFunctions.comillas(CP) + "\"");
			strCommand.Append(",FechaVencimiento='" + FechaVencimiento.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			strCommand.Append(",TiempoEntrega=\"" + WLMFunctions.comillas(TiempoEntrega) + "\"");
			strCommand.Append(",CondicionesPago=\"" + WLMFunctions.comillas(CondicionesPago) + "\"");
			strCommand.Append(",Observaciones=\"" + WLMFunctions.comillas(Observaciones) + "\"");
			strCommand.Append(",SubTotal=\"" + WLMFunctions.comillas(SubTotal) + "\"");
			strCommand.Append(",Descuento=\"" + WLMFunctions.comillas(Descuento) + "\"");
			strCommand.Append(",DescuentoPorcentaje=\"" + WLMFunctions.comillas(DescuentoPorcentaje) + "\"");
			strCommand.Append(",IVA=\"" + WLMFunctions.comillas(IVA) + "\"");
			strCommand.Append(",Total=\"" + WLMFunctions.comillas(Total) + "\"");
			strCommand.Append(",idListaPrecios='" + this.idListaPrecios.ToString() + "'");
			strCommand.Append(",idCondicionesPago='" + this.idCondicionesPago.ToString() + "'");
			strCommand.Append(",SaldoPendiente=\"" + WLMFunctions.comillas(SaldoPendiente) + "\"");
			strCommand.Append(",SaldoPagado=\"" + WLMFunctions.comillas(SaldoPagado) + "\"");
			strCommand.Append(",Status='" + Status.ToString() + "'");
			strCommand.Append(",NoPedido='" + NoPedido.ToString() + "'");
			strCommand.Append(",NoRemision='" + NoRemision.ToString() + "'");
			strCommand.Append(",NoSalida='" + NoSalida.ToString() + "'");
			if (FechaPedido != null)
				strCommand.Append(",FechaPedido='" + FechaPedido.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			if (FechaRemision != null)
				strCommand.Append(",FechaRemision='" + FechaRemision.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			if (FechaSalida != null)
				strCommand.Append(",FechaSalida='" + FechaSalida.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			strCommand.Append(",DiasCredito='" + DiasCredito.ToString() + "'");
			strCommand.Append(",idAlmacen='" + this.IdAlmacen.ToString() + "'");
			strCommand.Append(",idCompra='" + this.idCompra.ToString() + "'");
			strCommand.Append(",activo='" + Convert.ToInt16(Activo) + "'");
			strCommand.Append(",noFactura='" + NoFactura.ToString() + "'");
			strCommand.Append(",idFactura='" + this.idFactura.ToString() + "'");
			strCommand.Append(",facturado='" + Convert.ToInt16(Facturado) + "'");
			if (FechaSalida != null)
				strCommand.Append(",fechaFacturacion='" + FechaFacturacion.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			strCommand.Append(" WHERE id='" + this.id + "'");

			ConexionDBInterna.ExecuteCommand(strCommand.ToString());
		}
		#endregion
	}

	public class VentaCollection
	{
		#region private fields
		private List<Venta> _items; 
		#endregion

		#region Public Properties
		/// <summary>
		/// Get a List of Venta elements
		/// </summary>
		public List<Venta> Elementos { get; set; } 
		#endregion

		#region Constructors
		public VentaCollection()
		{
		}
		
		public VentaCollection(ref dbConnector ConexionDB)
		{

			string strCommand = "SELECT id FROM COTIZACIONES ORDER BY id DESC";
			OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
		 Elementos = new List<Venta>();
			while (dataReader.Read())
			{
				Venta newItem = new Venta(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
			 Elementos.Add(newItem);
			}
			dataReader.Close();
			dataReader.Dispose();
		}

		public VentaCollection(int noPagina, int tamanoPagina, ref dbConnector ConexionDB)
		{
			int inicio = ((noPagina - 1) * tamanoPagina) + 1;
			int final = noPagina * tamanoPagina;
			string strCommand = "SELECT id FROM COTIZACIONES ORDER BY id DESC limit " + inicio + "," + final + " ";
			OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
		 Elementos = new List<Venta>();
			while (dataReader.Read())
			{
				Venta newItem = new Venta(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
			 Elementos.Add(newItem);
			}
			dataReader.Close();
			dataReader.Dispose();
		}

		public VentaCollection(Cliente cliente, ref dbConnector ConexionDB)
		{

			string strCommand = "SELECT id FROM COTIZACIONES WHERE idCliente='" + cliente.id + "' ORDER BY id DESC";
			OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
		 Elementos = new List<Venta>();
			while (dataReader.Read())
			{
				Venta newItem = new Venta(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
			 Elementos.Add(newItem);
			}
			dataReader.Close();
			dataReader.Dispose();
		}
		#endregion

		#region Public Methods

		public Venta UltimaCotizacion()
		{
			foreach (Venta cot in Elementos)
			{
				if (cot.Status == 1)
					return cot;
			}
			return null;
		}

		public Venta UltimoPedido()
		{
			foreach (Venta cot in Elementos)
			{
				if (cot.Status > 1)
					return cot;
			}
			return null;
		} 
		#endregion
	}

	public class VentaItem : BaseClass
	{

		#region public properties
		public int idCotizacion { get; set; }
		public int idProducto { get; set; }
		public Decimal Cantidad { get; set; }
		public String UnidadMedida { get; set; }
		public String Clave { get; set; }
		public String Descripcion { get; set; }
		public String Categoria { get; set; }
		public String Linea { get; set; }
		public String Marca { get; set; }
		public String Modelo { get; set; }
		public String Color { get; set; }
		public String Acabado { get; set; }
		public Decimal Precio { get; set; }
		public int Status { get; set; }
		#endregion

		#region constructors
		public VentaItem(ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
			id = classBinder.NewRecord("COTIZACIONESITEMS");
			string queryString = "";
			queryString = "SELECT * FROM COTIZACIONESITEMS WHERE id='" + this.id + "'";
			GetRecord(queryString);
		}

		public VentaItem(int registryId, ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			string queryString = "";
			queryString = "SELECT * FROM COTIZACIONESITEMS WHERE id='" + registryId + "'";

			this.GetRecord(queryString);
		}
		public VentaItem(DataRow dataRow, ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			this.GetRecord(dataRow);
		}
		#endregion

		#region public methods


		public void Delete()
		{
			string queryString = "";
			queryString = "DELETE FROM COTIZACIONESITEMS WHERE id='" + this.id + "'";
			ConexionDBInterna.ExecuteCommand(queryString);

		}
		#endregion


		#region Private Methods
		private void GetRecord(string queryString)
		{
			OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
			if (reader.HasRows)
			{
				if (!reader.IsDBNull(reader.GetOrdinal("id")))
					id = (System.Int32)reader["id"];
				if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
				 fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
				 fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
					idUsuario = (System.Int32)reader["idUsuario"];
				if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
					idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
				if (!reader.IsDBNull(reader.GetOrdinal("idCotizacion")))
					idCotizacion = (System.Int32)reader["idCotizacion"];
				if (!reader.IsDBNull(reader.GetOrdinal("idProducto")))
					idProducto = (System.Int32)reader["idProducto"];
				if (!reader.IsDBNull(reader.GetOrdinal("Cantidad")))
				 Cantidad = (System.Decimal)reader["Cantidad"];
				if (!reader.IsDBNull(reader.GetOrdinal("unidadMedida")))
				 UnidadMedida = (System.String)reader["unidadMedida"];
				if (!reader.IsDBNull(reader.GetOrdinal("Clave")))
				 Clave = (System.String)reader["Clave"];
				if (!reader.IsDBNull(reader.GetOrdinal("Descripcion")))
				 Descripcion = (System.String)reader["Descripcion"];
				if (!reader.IsDBNull(reader.GetOrdinal("Categoria")))
				 Categoria = (System.String)reader["Categoria"];
				if (!reader.IsDBNull(reader.GetOrdinal("Linea")))
				 Linea = (System.String)reader["Linea"];
				if (!reader.IsDBNull(reader.GetOrdinal("Marca")))
				 Marca = (System.String)reader["Marca"];
				if (!reader.IsDBNull(reader.GetOrdinal("Modelo")))
				 Modelo = (System.String)reader["Modelo"];
				if (!reader.IsDBNull(reader.GetOrdinal("Color")))
				 Color = (System.String)reader["Color"];
				if (!reader.IsDBNull(reader.GetOrdinal("Acabado")))
				 Acabado = (System.String)reader["Acabado"];
				if (!reader.IsDBNull(reader.GetOrdinal("Precio")))
				 Precio = (System.Decimal)reader["Precio"];
				if (!reader.IsDBNull(reader.GetOrdinal("Status")))
				 Status = (System.Int32)reader["Status"];
			}
		}


		private void GetRecord(DataRow dataRow)
		{
			if (dataRow != null)
			{
				if (dataRow["id"] != null)
					id = (System.Int32)dataRow["id"];
				if (dataRow["fechaCreacion"] != null)
				 fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
				if (dataRow["fechaModificacion"] != null)
				 fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
				if (dataRow["idUsuario"] != null)
					idUsuario = (System.Int32)dataRow["idUsuario"];
				if (dataRow["idUsuarioModificacion"] != null)
					idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
				if (dataRow["idCotizacion"] != null)
					idCotizacion = (System.Int32)dataRow["idCotizacion"];
				if (dataRow["idProducto"] != null)
					idProducto = (System.Int32)dataRow["idProducto"];
				if (dataRow["Cantidad"] != null)
				 Cantidad = (System.Decimal)dataRow["Cantidad"];
				if (dataRow["unidadMedida"] != null)
				 UnidadMedida = (System.String)dataRow["unidadMedida"];
				if (dataRow["Clave"] != null)
				 Clave = (System.String)dataRow["Clave"];
				if (dataRow["Descripcion"] != null)
				 Descripcion = (System.String)dataRow["Descripcion"];
				if (dataRow["Categoria"] != null)
				 Categoria = (System.String)dataRow["Categoria"];
				if (dataRow["Linea"] != null)
				 Linea = (System.String)dataRow["Linea"];
				if (dataRow["Marca"] != null)
				 Marca = (System.String)dataRow["Marca"];
				if (dataRow["Modelo"] != null)
				 Modelo = (System.String)dataRow["Modelo"];
				if (dataRow["Color"] != null)
				 Color = (System.String)dataRow["Color"];
				if (dataRow["Acabado"] != null)
				 Acabado = (System.String)dataRow["Acabado"];
				if (dataRow["Precio"] != null)
				 Precio = (System.Decimal)dataRow["Precio"];
				if (dataRow["Status"] != null)
				 Status = (System.Int32)dataRow["Status"];
			}
		}


		protected override void UpdateBind()
		{
			StringBuilder strCommand = new StringBuilder();
			strCommand.Append("UPDATE COTIZACIONESITEMS set ");
			strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
			strCommand.Append(",idCotizacion='" + this.idCotizacion.ToString() + "'");
			strCommand.Append(",idProducto='" + this.idProducto.ToString() + "'");
			strCommand.Append(",Cantidad=\"" + WLMFunctions.comillas(Cantidad) + "\"");
			strCommand.Append(",unidadMedida=\"" + WLMFunctions.comillas(UnidadMedida) + "\"");
			strCommand.Append(",Clave=\"" + WLMFunctions.comillas(Clave) + "\"");
			strCommand.Append(",Descripcion=\"" + WLMFunctions.comillas(Descripcion) + "\"");
			strCommand.Append(",Categoria=\"" + WLMFunctions.comillas(Categoria) + "\"");
			strCommand.Append(",Linea=\"" + WLMFunctions.comillas(Linea) + "\"");
			strCommand.Append(",Marca=\"" + WLMFunctions.comillas(Marca) + "\"");
			strCommand.Append(",Modelo=\"" + WLMFunctions.comillas(Modelo) + "\"");
			strCommand.Append(",Color=\"" + WLMFunctions.comillas(Color) + "\"");
			strCommand.Append(",Acabado=\"" + WLMFunctions.comillas(Acabado) + "\"");
			strCommand.Append(",Precio=\"" + WLMFunctions.comillas(Precio) + "\"");
			strCommand.Append(",Status='" + Status.ToString() + "'");
			strCommand.Append(" WHERE id='" + id + "'");
			ConexionDBInterna.ExecuteCommand(strCommand.ToString());
		}
		#endregion
	}

	public class VentaItemCollection
	{

		#region private fields
		private List<VentaItem> _items; 
		#endregion

		#region Public Properties
		/// <summary>
		/// Gets an a list of VentaItem elements
		/// </summary>
		public List<VentaItem> Elementos { get; set; } 
		#endregion

		#region Constructors

		public VentaItemCollection()
		{
		}

		public VentaItemCollection(ref dbConnector ConexionDB)
		{

			string strCommand = "SELECT id FROM COTIZACIONESITEMS ";
			OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
		 Elementos = new List<VentaItem>();
			while (dataReader.Read())
			{
				VentaItem newItem = new VentaItem(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
			 Elementos.Add(newItem);
			}
			dataReader.Close();
			dataReader.Dispose();
		}

		public VentaItemCollection(Venta cotizacion, ref dbConnector ConexionDB)
		{

			string strCommand = "SELECT id FROM COTIZACIONESITEMS WHERE idCotizacion='" + cotizacion.id + "' ";
			OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
		 Elementos = new List<VentaItem>();
			while (dataReader.Read())
			{
				VentaItem newItem = new VentaItem(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
			 Elementos.Add(newItem);
			}
			dataReader.Close();
			dataReader.Dispose();
		}
		
		#endregion
	}

	public class VentaProceso : BaseClass
	{

		#region public properties
		public int idPerfilAutorizador { get; set; }
		public String nombreStatus { get; set; }
		public Boolean apartarStock { get;set; }
		public Boolean retirarStock { get; set; }
		public Boolean facturable { get; set; }
		public Boolean aplicarSaldoDeudor { get; set; }
		#endregion

		#region constructors
		public VentaProceso()
		{
		}

		public VentaProceso(ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDBInterna);
			id = classBinder.NewRecord("VENTAS_PROCESO");
			string queryString = "";
			queryString = "SELECT * FROM VENTAS_PROCESO WHERE id='" + this.id + "'";
			GetRecord(queryString);
		}

		public VentaProceso(int registryId, ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			string queryString = "";
			queryString = "SELECT * FROM VENTAS_PROCESO WHERE id='" + registryId + "'";
			WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDBInterna);
			this.GetRecord(queryString);
		}

		public VentaProceso(DataRow dataRow, dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			this.GetRecord(dataRow);
		}
		#endregion

		#region public methods


		public void Delete()
		{
			string queryString = "";
			queryString = "DELETE FROM VENTAS_PROCESO WHERE id='" + this.id + "'";
			ConexionDBInterna.ExecuteCommand(queryString);

		}
		#endregion

		#region Private Methods
		private void GetRecord(string queryString)
		{
			OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
			if (reader.HasRows)
			{
				if (!reader.IsDBNull(reader.GetOrdinal("id")))
					id = (System.Int32)reader["id"];
				if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
				 fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
				 fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
					idUsuario = (System.Int32)reader["idUsuario"];
				if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
					idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
				if (!reader.IsDBNull(reader.GetOrdinal("idPerfilAutorizador")))
					idPerfilAutorizador = (System.Int32)reader["idPerfilAutorizador"];
				if (!reader.IsDBNull(reader.GetOrdinal("nombreStatus")))
				 nombreStatus = (System.String)reader["nombreStatus"];
				if (!reader.IsDBNull(reader.GetOrdinal("apartarStock")))
				 apartarStock = Convert.ToBoolean(reader["apartarStock"]);
				if (!reader.IsDBNull(reader.GetOrdinal("retirarStock")))
				 retirarStock = Convert.ToBoolean(reader["retirarStock"]);
				if (!reader.IsDBNull(reader.GetOrdinal("facturable")))
				 facturable = Convert.ToBoolean(reader["facturable"]);
				if (!reader.IsDBNull(reader.GetOrdinal("aplicarSaldoDeudor")))
				 aplicarSaldoDeudor = Convert.ToBoolean(reader["aplicarSaldoDeudor"]);
			}
		}


		private void GetRecord(DataRow dataRow)
		{
			if (dataRow != null)
			{
				if (dataRow["id"] != null)
					id = (System.Int32)dataRow["id"];
				if (dataRow["fechaCreacion"] != null)
				 fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
				if (dataRow["fechaModificacion"] != null)
				 fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
				if (dataRow["idUsuario"] != null)
					idUsuario = (System.Int32)dataRow["idUsuario"];
				if (dataRow["idUsuarioModificacion"] != null)
					idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
				if (dataRow["idPerfilAutorizador"] != null)
					idPerfilAutorizador = (System.Int32)dataRow["idPerfilAutorizador"];
				if (dataRow["nombreStatus"] != null)
				 nombreStatus = (System.String)dataRow["nombreStatus"];
				if (dataRow["apartarStock"] != null)
				 apartarStock = (bool)dataRow["apartarStock"];
				if (dataRow["retirarStock"] != null)
				 retirarStock = (bool)dataRow["retirarStock"];
				if (dataRow["facturable"] != null)
				 facturable = (bool)dataRow["facturable"];
				if (dataRow["aplicarSaldoDeudor"] != null)
				 aplicarSaldoDeudor = (bool)dataRow["aplicarSaldoDeudor"];
			}
		}


		protected override void UpdateBind()
		{
			StringBuilder strCommand = new StringBuilder();
			strCommand.Append("UPDATE VENTAS_PROCESO set ");
			strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
			strCommand.Append(",idPerfilAutorizador='" + this.idPerfilAutorizador.ToString() + "'");
			strCommand.Append(",nombreStatus=\"" + WLMFunctions.comillas(nombreStatus) + "\"");
			strCommand.Append(",apartarStock='" + Convert.ToInt16(apartarStock) + "'");
			strCommand.Append(",retirarStock='" + Convert.ToInt16(retirarStock) + "'");
			strCommand.Append(",facturable='" + Convert.ToInt16(facturable) + "'");
			strCommand.Append(",aplicarSaldoDeudor='" + Convert.ToInt16(aplicarSaldoDeudor) + "'");
			strCommand.Append(" WHERE id='" + this.id + "'");
			ConexionDBInterna.ExecuteCommand(strCommand.ToString());
		}
		#endregion
	}

	public class VentaProcesoCollection
	{

		#region Public Properties
		public List<VentaProceso> Elementos { get; set; } 
		#endregion

		#region Constructors

		public VentaProcesoCollection()
		{
		}

		public VentaProcesoCollection(ref dbConnector ConexionDB)
		{
			string strCommand = "SELECT id FROM VENTAS_PROCESO ";
			OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
		 Elementos = new List<VentaProceso>();
			while (dataReader.Read())
			{
				VentaProceso newItem = new VentaProceso(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
			 Elementos.Add(newItem);
			}
			dataReader.Close();
			dataReader.Dispose();
		} 
		#endregion
	}

	public class VentaPago : BaseClass
	{

		#region public properties
		public int idCotizacion { get;set;  }
		public DateTime FechaRealizacion { get; set; }
		public int idMovimientoBancario { get; set; }
		public Decimal TotalPago { get; set; }
		public Decimal SaldoAntesPago { get; set; }
		public Decimal SaldoDespuesPago { get; set; }
		public int IdFactura { get; set; }
		#endregion

		#region constructors
		public VentaPago(ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDB);
			id = classBinder.NewRecord("COTIZACIONESPAGOS");
			string queryString = "";
			queryString = "SELECT * FROM COTIZACIONESPAGOS WHERE id='" + this.id + "'";
			GetRecord(queryString);
		}

		public VentaPago(int registryId, ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			string queryString = "";
			queryString = "SELECT * FROM COTIZACIONESPAGOS WHERE id='" + registryId + "'";

			this.GetRecord(queryString);
		}
		public VentaPago(DataRow dataRow, ref dbConnector ConexionDB)
		{
			ConexionDBInterna = ConexionDB;
			this.GetRecord(dataRow);
		}
		#endregion

		#region public methods


		public void Delete()
		{
			string queryString = "";
			queryString = "UPDATE COTIZACIONESPAGOS SET activo=0 WHERE id='" + this.id + "'";
			ConexionDBInterna.ExecuteCommand(queryString);

		}
		#endregion

		#region Private Methods
		private void GetRecord(string queryString)
		{
			OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
			if (reader.HasRows)
			{
				if (!reader.IsDBNull(reader.GetOrdinal("id")))
					id = (System.Int32)reader["id"];
				if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
				 fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
				 fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
					idUsuario = (System.Int32)reader["idUsuario"];
				if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
					idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
				if (!reader.IsDBNull(reader.GetOrdinal("idCotizacion")))
					idCotizacion = (System.Int32)reader["idCotizacion"];
				if (!reader.IsDBNull(reader.GetOrdinal("FechaRealizacion")))
				 FechaRealizacion = Convert.ToDateTime(reader["FechaRealizacion"]);
				if (!reader.IsDBNull(reader.GetOrdinal("idMovimientoBancario")))
					idMovimientoBancario = (System.Int32)reader["idMovimientoBancario"];
				if (!reader.IsDBNull(reader.GetOrdinal("TotalPago")))
				 TotalPago = (System.Decimal)reader["TotalPago"];
				if (!reader.IsDBNull(reader.GetOrdinal("SaldoAntesPago")))
				 SaldoAntesPago = (System.Decimal)reader["SaldoAntesPago"];
				if (!reader.IsDBNull(reader.GetOrdinal("SaldoDespuesPago")))
				 SaldoDespuesPago = (System.Decimal)reader["SaldoDespuesPago"];
				if (!reader.IsDBNull(reader.GetOrdinal("idFactura")))
					IdFactura = (System.Int32)reader["idFactura"];
			}
		}


		private void GetRecord(DataRow dataRow)
		{
			if (dataRow != null)
			{
				if (dataRow["id"] != null)
					id = (System.Int32)dataRow["id"];
				if (dataRow["fechaCreacion"] != null)
				 fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
				if (dataRow["fechaModificacion"] != null)
				 fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
				if (dataRow["idUsuario"] != null)
					idUsuario = (System.Int32)dataRow["idUsuario"];
				if (dataRow["idUsuarioModificacion"] != null)
					idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
				if (dataRow["idCotizacion"] != null)
					idCotizacion = (System.Int32)dataRow["idCotizacion"];
				if (dataRow["FechaRealizacion"] != null)
				 FechaRealizacion = (System.DateTime)dataRow["FechaRealizacion"];
				if (dataRow["idMovimientoBancario"] != null)
					idMovimientoBancario = (System.Int32)dataRow["idMovimientoBancario"];
				if (dataRow["TotalPago"] != null)
				 TotalPago = (System.Decimal)dataRow["TotalPago"];
				if (dataRow["SaldoAntesPago"] != null)
				 SaldoAntesPago = (System.Decimal)dataRow["SaldoAntesPago"];
				if (dataRow["SaldoDespuesPago"] != null)
				 SaldoDespuesPago = (System.Decimal)dataRow["SaldoDespuesPago"];
				if (dataRow["idFactura"] != null)
					IdFactura = (System.Int32)dataRow["idFactura"];
			}
		}


		protected override void UpdateBind()
		{
			StringBuilder strCommand = new StringBuilder();
			strCommand.Append("UPDATE COTIZACIONESPAGOS set ");
			strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
			strCommand.Append(",idCotizacion='" + this.idCotizacion.ToString() + "'");
			strCommand.Append(",FechaRealizacion='" + this.FechaRealizacion.ToString("yyyy-MM-dd HH:mm:ss") + "'");
			strCommand.Append(",idMovimientoBancario='" + this.idMovimientoBancario.ToString() + "'");
			strCommand.Append(",TotalPago=\"" + WLMFunctions.comillas(TotalPago) + "\"");
			strCommand.Append(",SaldoAntesPago=\"" + WLMFunctions.comillas(SaldoAntesPago) + "\"");
			strCommand.Append(",SaldoDespuesPago=\"" + WLMFunctions.comillas(SaldoDespuesPago) + "\"");
			strCommand.Append(",idFactura='" + this.IdFactura.ToString() + "'");

			strCommand.Append(" WHERE id='" + this.id + "'");
			ConexionDBInterna.ExecuteCommand(strCommand.ToString());
		}
		#endregion
	}

	public class VentaPagoCollection
	{
		#region private fields
		private List<VentaPago> _items; 
		#endregion

		#region Public Properties
		public List<VentaPago> Elementos { get; set; } 
		#endregion

		#region Constructors
		public VentaPagoCollection()
		{
		}

		public VentaPagoCollection(ref dbConnector ConexionDB)
		{

			string strCommand = "SELECT id FROM COTIZACIONESPAGOS ";
			OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
		 Elementos = new List<VentaPago>();
			while (dataReader.Read())
			{
				VentaPago newItem = new VentaPago(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
			 Elementos.Add(newItem);
			}
			dataReader.Close();
			dataReader.Dispose();
		}

		public VentaPagoCollection(Venta cotizacion, ref dbConnector ConexionDB)
		{

			string strCommand = "SELECT id FROM COTIZACIONESPAGOS WHERE idCotizacion='" + cotizacion.id + "'";
			OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
		 Elementos = new List<VentaPago>();
			while (dataReader.Read())
			{
				VentaPago newItem = new VentaPago(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
			 Elementos.Add(newItem);
			}
			dataReader.Close();
			dataReader.Dispose();
		} 
		#endregion
	}
}
